
//   Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
//   Copyright (c) 2020-2022 Huawei Device Co., Ltd. All rights reserved.
 
//   Redistribution and use in source and binary forms, with or without modification,
//   are permitted provided that the following conditions are met
 
//   1. Redistributions of source code must retain the above copyright notice, this list of
//      conditions and the following disclaimer.
 
//   2. Redistributions in binary form must reproduce the above copyright notice, this list
//      of conditions and the following disclaimer in the documentation andor other materials
//      provided with the distribution.
 
//   3. Neither the name of the copyright holder nor the names of its contributors may be used
//      to endorse or promote products derived from this software without specific prior written
//      permission.
 
//   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
//   AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
//   THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
//   PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
//   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
//   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
//   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
//   OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
//   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
//   OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
//   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 

#include unistd.h
#include los_task.h
#include securec.h
#include los_config.h
#include los_debug.h
#include los_hook.h
#include los_interrupt.h
#include los_memory.h
#include los_mpu.h
#include los_sched.h
#include los_mux.h
#include los_sem.h
#include los_timer.h
#if (LOSCFG_BASE_CORE_CPUP == 1)
#include los_cpup.h
#endif
#if (LOSCFG_KERNEL_PM == 1)
#include los_pm.h
#endif


  @ingroup los_task
  @brief Convenience macro for bitwise operation of task module
 

#define TASK_STACK_SIZE_TEST 4096
#define TASK_PRIO_TEST 10
#define LOS_TASK_STATUS_DETACHED 0x0100
UINT32 g_testTaskID01;
UINT32 g_testTaskID02;
void usleep(int micro_seconds);

static VOID TaskF01(VOID)
{
    int sum = 0;

    while(1){
        printf(This is Yang Zihao's task1, current sum%dn, sum++);
        usleep(1000000);
    }
}

static UINT32 Create_Task1(VOID)
{
    UINT32 ret;
    TSK_INIT_PARAM_S task1 = { 0 };
    task1.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01;
    task1.uwStackSize = TASK_STACK_SIZE_TEST;
    task1.pcName = Tsk001A;
    task1.usTaskPrio = TASK_PRIO_TEST - 1;
    task1.uwResved = LOS_TASK_STATUS_DETACHED;

    ret = LOS_TaskCreate(&g_testTaskID01, &task1);

    return LOS_OK;
}

static VOID TaskF02(VOID)
{
    int sum = 0;

    while(1){
        printf(This is Yang Zihao's task2, current sum%dn, sum++);
        usleep(3000000);

        if(sum=10)
        {
            UINT32 task1Status;
            UINT32 ret = LOS_TaskStatusGet(g_testTaskID01, &task1Status);
            if(ret == LOS_OK)
            {
                if(task1Status != OS_TASK_STATUS_EXIT)
                {
                    LOS_TaskDelete(g_testTaskID01);
                }
            }
        }
    }
}

static UINT32 Create_Task2(VOID)
{
    UINT32 ret;
    TSK_INIT_PARAM_S task2 = { 0 };
    task2.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF02;
    task2.uwStackSize = TASK_STACK_SIZE_TEST;
    task2.pcName = Tsk002A;
    task2.usTaskPrio = TASK_PRIO_TEST - 2;
    task2.uwResved = LOS_TASK_STATUS_DETACHED;

    ret = LOS_TaskCreate(&g_testTaskID02, &task2);
    
    return LOS_OK;
}

VOID task_demo()
{
    Create_Task1();
    Create_Task2();
}